package learn.advance.date1;

import com.sun.tools.internal.ws.wsdl.document.soap.SOAPUse;
import org.omg.CORBA.PUBLIC_MEMBER;

import javax.swing.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

class Demo1 {
    public static void Test() {
        System.out.println(System.currentTimeMillis());
    }
}

class Demo2Date {
    public static void Test() {
        Demo1();
        Demo2();
        Demo3();
    }

    private static void Demo1() {
        Date date = new Date();
        long time = date.getTime();
        System.out.println(time);
    }

    private static void Demo2() {
        Date date = new Date(0L);
        System.out.println(date);
        date = new Date(3742767540068L);

        System.out.println(date);
    }

    private static void Demo3() {
        Date date = new Date();
        System.out.println(date);
    }
}

class Demo01DateFormat {
    public static void Test() throws ParseException {
        Demo2();
        Demo1();

    }


    private static void Demo2() throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
        Date date = sdf.parse("2088年08月08日 15时51分54秒");
        System.out.println(date);
    }

    private static void Demo1() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
        Date date = new Date();
        String d = sdf.format(date);
        System.out.println(date);
        System.out.println(d);
    }
}

/*
    java.util.Calendar类:日历类
    Calendar类是一个抽象类,里边提供了很多操作日历字段的方法(YEAR、MONTH、DAY_OF_MONTH、HOUR )
    Calendar类无法直接创建对象使用,里边有一个静态方法叫getInstance(),该方法返回了Calendar类的子类对象
    static Calendar getInstance() 使用默认时区和语言环境获得一个日历。
 */

class Demo01Calendar{
    public static void Test(){
        Calendar c=Calendar.getInstance();
        System.out.println(c);
    }
}

//interface T{
//
//}
//

/*
    Calendar类的常用成员方法:
        public int get(int field)：返回给定日历字段的值。
        public void set(int field, int value)：将给定的日历字段设置为给定值。
        public abstract void add(int field, int amount)：根据日历的规则，为给定的日历字段添加或减去指定的时间量。
        public Date getTime()：返回一个表示此Calendar时间值（从历元到现在的毫秒偏移量）的Date对象。
    成员方法的参数:
        int field:日历类的字段,可以使用Calendar类的静态成员变量获取
            public static final int YEAR = 1;	年
            public static final int MONTH = 2;	月
            public static final int DATE = 5;	月中的某一天
            public static final int DAY_OF_MONTH = 5;月中的某一天
            public static final int HOUR = 10; 		时
            public static final int MINUTE = 12; 	分
            public static final int SECOND = 13;	秒
 */

class Demo2Calendar{
    public static void Test(){
        Demo1();
        Demo2();
        Demo3();
    }

    private static void Demo1(){
        Calendar c=Calendar.getInstance();
        Date date=c.getTime();
        System.out.println(date);
    }

    private static void Demo2(){
        Calendar c=Calendar.getInstance();

        c.add(Calendar.YEAR,2);
        c.add(Calendar.MONTH,-3);

        int year=c.get(Calendar.YEAR);
        System.out.println(year);

        int month=c.get(Calendar.MONTH);
        //西方的月份0-11 东方:1-12
        System.out.println(month);

        int date=c.get(Calendar.DATE);
        System.out.println(date);

        Date time = c.getTime();
        System.out.println(time);
    }

    private static void Demo3(){
        Calendar instance = Calendar.getInstance();
        instance.set(Calendar.YEAR,9999);
        System.out.println(instance.getTime());
    }


}


public class TestDate {

    public static void main(String[] args) throws ParseException {
        //Demo1.Test();
        //Demo2Date.Test();
        Demo01DateFormat.Test();
        //Demo01Calendar.Test();
        //Demo2Calendar.Test();
    }
}
